package com.dp.server.entities;

import java.util.Calendar;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

import com.dp.client.dto.VueloDTO;
import com.dp.server.IServiciosAlmacenImpl;
import com.dp.server.MantenimientoGenerico;

@Entity
public class Vuelo {
	private int id;
	private int idConexion;
	private int idOrigen , idDestino;
	private boolean eliminado;
	private Date fechaHoraSalida;
	private Date fechaHoraLLegada;
	private Date fechaHoraRealSalida;
	private Date fechaHoraRealLlegada;
	private int duracion;
	
	public Date getFechaHoraLLegada() {
		return fechaHoraLLegada;
	}
	public void setFechaHoraLLegada(Date fechaHoraLLegada) {
		this.fechaHoraLLegada = fechaHoraLLegada;
	}
	public Date getFechaHoraRealSalida() {
		return fechaHoraRealSalida;
	}
	public void setFechaHoraRealSalida(Date fechaHoraRealSalida) {
		this.fechaHoraRealSalida = fechaHoraRealSalida;
	}
	public Date getFechaHoraRealLlegada() {
		return fechaHoraRealLlegada;
	}
	public void setFechaHoraRealLlegada(Date fechaHoraRealLlegada) {
		this.fechaHoraRealLlegada = fechaHoraRealLlegada;
	}
	private int capacidad;
	public static int EN_ORIGEN = 0;
	public static int VOLANDO = 1;
	public static int EN_DESTINO = 2;
	public static int CANCELADO = 4;
	public static String ESTADO[] = {"En Origen","Volando","En Destino" , "Cancelado" };
	/* 0 : en origen 
	 * 1 : volando
	 * 2 : en destino
	 * 3 : cancelado
	 * */
	private int idEstado;
	public int getIdEstado() {
		return idEstado;
	}
	public void setIdEstado(int idEstado) {
		this.idEstado = idEstado;
	}
	public int getDuracion() {
		return duracion;
	}
	public void setDuracion(int duracion) {
		this.duracion = duracion;
	}
	public int getIdConexion() {
		return idConexion;
	}
	public void setIdConexion(int idConexion) {
		this.idConexion = idConexion;
	}
	public int getIdDestino() {
		return idDestino;
	}
	public void setIdDestino(int idDestino) {
		this.idDestino = idDestino;
	}
	public int getIdOrigen() {
		return idOrigen;
	}
	public void setIdOrigen(int idOrigen) {
		this.idOrigen = idOrigen;
	}
	public boolean isEliminado() {
		return eliminado;
	}
	public void setEliminado(boolean eliminado) {
		this.eliminado = eliminado;
	}
	public Date getFechaHoraSalida() {
		return fechaHoraSalida;
	}
	public void setFechaHoraSalida(Date fechaHoraSalida) {
		this.fechaHoraSalida = fechaHoraSalida;
	}
	public int getCapacidad() {
		return capacidad;
	}
	public void setCapacidad(int capacidad) {
		this.capacidad = capacidad;
	}
	public void setId(int id) {
		this.id = id;
	}
	public void despegar(){
		idEstado = 1;
	}
	public void aterrizar(){
		idEstado = 2;
	}
	public void cancelar(){
		idEstado = 3;
		eliminado=true;
	}
	public VueloDTO extractDTO(){
		VueloDTO vuelo = new VueloDTO();
		vuelo.id = id;
		vuelo.idConexion = this.idConexion;
		vuelo.capacidad = this.capacidad;
		vuelo.idOrigen = this.idOrigen;
		vuelo.idDestino = this.idDestino;
		vuelo.fechaHoraSalida = this.fechaHoraSalida;
		vuelo.duracion = this.duracion;
		MantenimientoGenerico<Almacen> mantenimiento = new MantenimientoGenerico<>("Almacen");
		vuelo.almacenDestino = mantenimiento.buscarID( idDestino ).extractDTO();
		//vuelo.almacenDestino = (new IServiciosAlmacenImpl()).getAlmacen(idDestino);
		vuelo.almacenOrigen = mantenimiento.buscarID( idOrigen ).extractDTO();
		//vuelo.almacenOrigen = (new IServiciosAlmacenImpl()).getAlmacen(idOrigen);
		Calendar calendar = Calendar.getInstance();
		calendar.setTime( fechaHoraSalida );
		calendar.add( Calendar.HOUR_OF_DAY , duracion );
		vuelo.fechaHoraLlegada = calendar.getTime();
		int ans = 0;
		//ans = (int)(MantenimientoGenerico.queryCount("from ReservaVuelo where idVuelo =8 "+id);
		//ans = (int) MantenimientoGenerico.countQuery("idVuelo="+id, "ReservaVuelo");
		vuelo.capacidadConsumida = ans;
		vuelo.idEstado = idEstado;
		vuelo.estado = ESTADO[ idEstado ];
		vuelo.nombreConexion = "CON"+id;
		return vuelo;
	}
	@Id
	@GeneratedValue(generator="increment")
	@GenericGenerator(name="increment", strategy = "increment")
	public int getId() {
		return id;
	}
	public Vuelo( VueloDTO vuelo ) {
		super();
		this.id = vuelo.id;
		this.idConexion = vuelo.idConexion;
		this.idOrigen = vuelo.idOrigen;
		this.idDestino = vuelo.idDestino;
		this.fechaHoraSalida = vuelo.fechaHoraSalida;
		this.capacidad = vuelo.capacidad;
		this.duracion = vuelo.duracion;
		this.idEstado = 0;
		Calendar calendar = Calendar.getInstance();
		calendar.setTime( fechaHoraSalida );
		calendar.add( Calendar.HOUR_OF_DAY , duracion );
		this.fechaHoraLLegada = calendar.getTime();
	}
	public Vuelo(){}
	
}
